PSCI: Publish CPU ON event
authorJeenu Viswambharan <[email protected]>
Fri, 22 Sep 2017 07:32:10 +0000 (08:32 +0100)
committerJeenu Viswambharan <[email protected]>
Mon, 23 Oct 2017 07:15:11 +0000 (08:15 +0100)
This allows other EL3 components to subscribe to CPU on events.

Update Firmware Design guide to list psci_cpu_on_finish as an available
event.

Change-Id: Ida774afe0f9cdce4021933fcc33a9527ba7aaae2
Signed-off-by: Jeenu Viswambharan <[email protected]>
docs/firmware-design.rst
include/lib/el3_runtime/pubsub_events.h
lib/psci/psci_on.c

index 8851065a1ae4a425f1a12a88b9ec1dec435ee37d..853e39011577ea97bc36adea0eedc4018723a673 100644 (file)
@@ -2339,6 +2339,22 @@ implement:
 
    SUBSCRIBE_TO_EVENT(foo, foo_handler);
 
+Available Events
+~~~~~~~~~~~~~~~~
+
+ARM Trusted Firmware core makes some events available by default. They're listed
+below, along with information as to when they're published, and the arguments
+passed to subscribed handlers.
+
+Other EL3 components that are conditionally compiled in may make their own
+events available, but aren't documented here.
+
+-  ``psci_cpu_on_finish``
+
+   - When: Published on a PE after it's finished its power-up sequence.
+
+   - Argument: ``NULL``.
+
 Performance Measurement Framework
 ---------------------------------
 
index 8ef1a11b5f1e25013ee9aba30b4ddeaed6805f9a..62550f81eacdffe66e2ae6fac8458c1611e4c06e 100644 (file)
@@ -10,3 +10,9 @@
  * This file defines a list of pubsub events, declared using
  * REGISTER_PUBSUB_EVENT() macro.
  */
+
+/*
+ * Event published after a CPU has been powered up and finished its
+ * initialization.
+ */
+REGISTER_PUBSUB_EVENT(psci_cpu_on_finish);
index d3d0e2ff762d2ef21cb83712a962825076568800..53b044ecff1da625be94996eccdbc9a3283024c8 100644 (file)
@@ -11,6 +11,7 @@
 #include <context_mgmt.h>
 #include <debug.h>
 #include <platform.h>
+#include <pubsub_events.h>
 #include <stddef.h>
 #include "psci_private.h"
 
@@ -188,6 +189,8 @@ void psci_cpu_on_finish(unsigned int cpu_idx,
        if (psci_spd_pm && psci_spd_pm->svc_on_finish)
                psci_spd_pm->svc_on_finish(0);
 
+       PUBLISH_EVENT(psci_cpu_on_finish);
+
        /* Populate the mpidr field within the cpu node array */
        /* This needs to be done only once */
        psci_cpu_pd_nodes[cpu_idx].mpidr = read_mpidr() & MPIDR_AFFINITY_MASK;